Why
為什麼我們要檢查使用者輸入的資料呢?
How
讓我們使用 composer 來安裝別人寫好的功能吧
在終端機打上
composer require wixel/gump
或是編輯 composer.json
{
"require": {
"wixel/gump": "dev-master"
}
}
再切到終端機執行
composer install
使用說明書在這裡:
那我們直接實作到專案上來看看效果:
route.php
<?php
$route = new Router(Request::uri()); //搭配 .htaccess 排除資料夾名稱後解析 URL
$route->getParameter(1); // 從 http://127.0.0.1/game/aaa/bbb 取得 aaa 字串之意
// 用參數決定載入某頁並讀取需要的資料
switch($route->getParameter(1)){
case "do_create":
$hero_name = "";
$hero_description = "";
// 移除跨站攻擊的不安全代碼
$data = GUMP::xss_clean($_POST);
// 設定驗證規則
$is_valid = GUMP::is_valid($data, array(
'hero_name' => 'required',
'hero_description' => 'required|max_len,100|min_len,6'
));
if($is_valid === true) { // 如果符合規則的話
$table = "hero";
$data_array['hero_name'] = $data['hero_name'];
$data_array['hero_description'] = $data['hero_name'];
Database::get()->insert($table, $data_array);
header("Location: ".WebsiteConfig::BASE_URL."success");
} else {
print_r($is_valid);
die;
}
exit;
break;
case "create":
include('view/header/default.php'); // 載入共用的頁首
include('view/body/create.php'); // 載入新增用的表單
include('view/footer/default.php'); // 載入共用的頁尾
break;
case "success":
include('view/header/default.php'); // 載入共用的頁首
include('view/body/success.php'); // 載入新增用的表單
include('view/footer/default.php'); // 載入共用的頁尾
break;
case "list":
// 讀取全英雄列表資料
// Database::get()->query( ...略... );
include('view/header/default.php'); // 載入共用的頁首
include('view/body/list.php');
include('view/footer/default.php'); // 載入共用的頁尾
break;
case "hero":
// 讀取單一英雄資料
// Database::get()->query( ...略... );
include('view/header/default.php'); // 載入共用的頁首
include('view/body/hero.php');
include('view/footer/default.php'); // 載入共用的頁尾
break;
default:
include('view/header/default.php'); // 載入共用的頁首
include('view/body/default.php');
include('view/footer/default.php'); // 載入共用的頁尾
break;
}
建立一個 view/body/success.php
<?php
echo "success";
在這裡輸入資料
如果有欄位是空的就會:
Array ( [0] => The Hero Name field is required )
如果描述欄位少於6個字:
Array ( [0] => The Hero Description field needs to be at least 6 characters )
wixel/gump 最新版2.0棄用了GUMP::xss_clean ,安裝 wixel/gump 記得安裝舊版,才能用!